<?php 
/* 
 * ********* CVS HEADER ********* 
 * 
 * $RCSfile: admenvfilelist.php,v $ 
 * $Date: 2006/03/16 20:31:11 $ 
 * $Revision: 1.5 $ 
 * 
 * ********* CVS HEADER ********* 
 */
if (!isset($argid)) {
	rportalerreur("Aucun environnement en param&egrave;tre !","?op=admenvliste");
}

/* Remplit la liste des repertoires */
function parseBlocRepertoire($P_bloc, $P_tableau, $P_taille, $P_argid) {
	if ($P_taille == 0) {
		return;
	}
	global $TPLN;
	for ($i = 0 ; $i < $P_taille ; $i++) {
		$TPLN->Parse($P_bloc.".fichier",$P_tableau[$i]['fichier']); 
		$TPLN->Parse($P_bloc.".taille",$P_tableau[$i]['taille']); 
		$TPLN->Parse($P_bloc.".icone",$P_tableau[$i]['icone']);
		if ("" == $P_tableau[$i]['lien']) { 
			$TPLN->EraseItem($P_bloc.".lien");
		} else {
			$TPLN->Parse($P_bloc.".lien",$P_tableau[$i]['lien']);
		}
		$TPLN->Parse($P_bloc.".argid",$P_argid); 
		$TPLN->Loop($P_bloc); 
	}
}

/* Remplit la liste des fichiers */
function parseBlocFichier($P_bloc, $P_tableau, $P_taille, $P_argid) {
	if ($P_taille == 0) {
		return;
	}
	global $TPLN;
	for ($i = 0 ; $i < $P_taille ; $i++) {
		$TPLN->Parse($P_bloc.".fichier",$P_tableau[$i]['fichier']); 
		$TPLN->Parse($P_bloc.".taille",$P_tableau[$i]['taille']); 
		$TPLN->Parse($P_bloc.".icone",$P_tableau[$i]['icone']);
		$TPLN->Parse($P_bloc.".lien", $P_tableau[$i]['lien']);
		$TPLN->Parse($P_bloc.".supprimer", $P_tableau[$i]['supprimer']);
		$TPLN->Parse($P_bloc.".argid",$P_argid);
		if ($P_tableau[$i]['voir']) {
			$TPLN->Parse($P_bloc.$P_tableau[$i]['blocVoir'].".lien",$P_tableau[$i]['lienvoir']);
			$TPLN->Parse($P_bloc.$P_tableau[$i]['blocVoir'].".target",$P_tableau[$i]['target']);
			$TPLN->Loop($P_bloc.$P_tableau[$i]['blocVoir']);
		} else {
			$TPLN->EraseBloc($P_bloc.$P_tableau[$i]['blocVoir']);
		}
		if ($P_tableau[$i]['editer']) {
			if ("" == $P_tableau[$i]['lien']) { 
				$TPLN->EraseItem($P_bloc.$P_tableau[$i]['blocEditer'].".lien");
			} else {
				$TPLN->Parse($P_bloc.$P_tableau[$i]['blocEditer'].".lien",$P_tableau[$i]['lien']);
			}
			$TPLN->Parse($P_bloc.$P_tableau[$i]['blocEditer'].".argid",$P_argid); 
			$TPLN->Loop($P_bloc.$P_tableau[$i]['blocEditer']);
		} else {
			$TPLN->EraseBloc($P_bloc.$P_tableau[$i]['blocEditer']);
		}
		$TPLN->Loop($P_bloc); 
	}
}

/* Finalise l'upload du fichier */
function recupereFichier($P_fichier, $P_destDir, &$P_error) {
	$L_name = $P_fichier['name'];

	$L_full_file_name = $P_destDir.$L_name;

	if (file_exists($L_full_file_name)) {
		$P_error = "Le fichier existe d&eacute;j&agrave;";
		return false;
	}
	$L_tmpname = $P_fichier['tmp_name'];
	
	$L_result = move_uploaded_file($L_tmpname, $L_full_file_name);
	if (!$L_result) {
		$P_error = "move_uploaded_file() a retourn&eacute; l'erreur num&eacute;ro ".$P_fichier['error'];
		return false;
	}
	$P_error = $L_name;
	$P_error = $L_full_file_name;
	return true;
}

global $rportalconstants;

$query="SELECT `nom` FROM environnement WHERE id='$argid'";
$result=rportalrequete($query) or rportalerreur($query,"?op=admenvliste");	
if(!$L_environnement=rportalligne($result)) {
	rportalerreur("L'environnement [id=$argid] n'existe pas","?op=admenvliste");
}

$L_public_path = $rportalconstants->get_value("PATH", "environnement.path.public");
$L_basePath = $rportalconstants->get_value("PATH", "environnement.path.public");
$L_curpath=$L_basePath.$L_environnement['nom']."/";
$L_message = "";
$L_creation = "creer"; /* Action de creer le repertoire */
$L_ajout = "ajouter"; /* Action d'ajouter un fichier */
$L_supprimer = "supprimer"; /* Action de supprimer un fichier */
$L_nom = "uploaded_file";
$L_valid_prefix = "val_";

$L_insubdir = false;
$L_createDir = true; /* Autoriser ou non la creation du repertoire */
if (isset($file)) {
	if(!(strpos($file,'..')===false)) {
		/* La presence de '..' est interdite */
		header("Location: ?op=admenvfilelist&argid=".$argid);
		exit;
	}
	/* dans un sous-repertoire */
	$L_insubdir = true;
	$L_createDir = false;
	$L_pos = strrpos($file,'/');
	$L_curpath .= $file;
	if ($L_pos == strlen($file)-1) {
		/* there is a "/" at the end */
		$file =  substr($file,0,strlen($file) - 1);
	} else {
		$L_curpath .= "/";
	}
	if ($L_pos === false) {
		$L_lienRetour ="";
	} else {
		$L_lienRetour ="&file=";
		$L_lienRetour.=substr($file,0,$L_pos+1);
	} 
}

if (isset($action)) {
	/* Demande de creation du repertoire */
	if ($action == $L_creation) {
		if (!is_dir($L_curpath)) {
			mkdir($L_curpath);
			header("Location: ?op=admenvfilelist&argid=".$argid);
			exit;
		} else {
			rportalerreur("L'environnement [id=$argid] a d&eacute;j&agrave; son r&eacute;pertoire public","?op=admenvfilelist&argid=".$argid);
		}
	}
	/* Demande d'ajout de fichier */
	if ($action == $L_ajout) {
		$L_ajFichier = $L_valid_prefix.$L_nom; 
		if (isset($$L_ajFichier)) {
			/* Ajout de fichier */
			if (!isset($$L_nom)) {
				rportalerreur("Aucun fichier &agrave; uploader.","?op=admenvfilelist&argid=".$argid);
			}
			$L_retour = recupereFichier($_FILES[$L_nom], $L_curpath, $L_error);
			if (!$L_retour) {
				rportalerreur($L_error,"?op=admenvfilelist&argid=".$argid);
			}
		}
		/* Dans tous les cas on revient */
		header("Location: ?op=admenvfilelist&argid=".$argid.$L_lienRetour);
		exit;
	}
	/* Demande de suppression de fichier */
	if ($action == $L_supprimer) {
		/* La confirmation a ete effectuee */
		if (file_exists($L_curpath) && !is_dir($L_curpath)) {
			if (!unlink($L_curpath)) {
				rportalerreur("Erreur sur le fichier '$L_curpath'","?op=admenvfilelist&argid=".$argid);
			}
			header("Location: ?op=admenvfilelist&argid=".$argid.$L_lienRetour );
			exit;
		} else {
			rportalerreur("Erreur sur le fichier '$L_curpath'","?op=admenvfilelist&argid=".$argid);
		}
	}
} 

$L_modules = '';
$L_base_env = get_env_path();
require_once(get_path_module("fonctions.fichiers"));
require_once("module/TPLN/TPLN.php");

$TPLN = new TPLN; 
$TPLN->Open($op_basepath.get_path("tpl")."admenvfilelist.html"); 
$TPLN->IncludeFile("header",$L_base_env.$session['environnement']."/header.php");

require_once(get_path_module("admin")); 
$pc = new panneau_controle(); 
$pc->calculRubriqueParFonction('admenvliste'); 
$TPLN->Parse("panneau_controle",$pc->retourneEntete());

$L_contains=false;
$L_fileList = array();
$L_fIndex = 0;
$L_dirList = array();
$L_dIndex = 0;
if (is_dir($L_curpath)){
	$dir=dir($L_curpath);
	while ($fichier = $dir->read()) {
		$L_filename = $L_curpath.$fichier;
		$L_lien = "";
		if ($L_insubdir) {
			$L_lien .= $file . "/";
		}
		$L_lien .= $fichier;
		switch ($fichier) {
			case "." :
				break;
			case "..":
				if (!$L_insubdir) {
					break;
				}
				$fichier = "..";
				$L_lien = substr($file, 0, strrpos($file,"/") );
				if ($L_lien != "") {
					$L_lien = "&file=" . $L_lien . "/";
				}
			default :
				if (is_file($L_filename)) {
					$L_ext = strtolower(file_ext($fichier));
					$L_editer = est_texte($L_ext);
					$L_voir	= est_image($L_ext);
					$L_fileList[$L_fIndex++] = 
						array(	"fichier"		=> $fichier,
								"taille"		=> fsize(intval(filesize($L_filename))),
								"icone"			=> GetIcone($L_ext),
								"lien"			=> $L_lien,
								"supprimer"		=> $L_supprimer,
								"editer"		=> $L_editer,
								"voir"			=> $L_voir,
								"blocEditer"	=> ".blocEditer",
								"blocVoir"		=> ".blocVoir",
								"lienvoir"		=> $L_filename,
								"target"		=> "_blank"
							);
				} else if (is_dir($L_filename)) {
					if ($fichier != ".." ) {
						$L_lien = "&file=";
						if ($L_insubdir) {
							$L_lien .= $file . "/";
						}
						$L_lien .= $fichier . "/";
					}
					$L_dirList[$L_dIndex++] = 
						array(	"fichier"		=> $fichier,
								"taille"		=> "&nbsp;",
								"icone"			=> GetIcone("dir"),
								"lien"			=> $L_lien
							);
				}
				break;
		}
	}
	$L_createDir = false;
	if (($L_fIndex + $L_dIndex) == 0) {
		$L_message = "Pas de fichiers publics pour cet environnement !";
	}
} else {
	if ($L_createDir) {
		$L_message = "Pas de r&eacute;pertoire public pour cet environnement !";
	} else {
		/* Sous repertoire qui n'existe pas... */
		header("Location: ?op=admenvfilelist&argid=".$argid);
		exit;
	}
}
$L_bloc = "blocRepertoire";
if(0 == $L_dIndex) {
	$TPLN->EraseBloc($L_bloc);
} else {
	parseBlocRepertoire($L_bloc, $L_dirList, $L_dIndex, $argid);
}
$L_bloc = "blocFichier";
if(0 == $L_fIndex) {
	$TPLN->EraseBloc($L_bloc);
} else {
	parseBlocFichier($L_bloc, $L_fileList, $L_fIndex, $argid);
}


$L_bloc = "creerRepertoire";
 
if ( $L_createDir ) {
	$TPLN->Parse($L_bloc.".argid", $argid);
	$TPLN->Parse($L_bloc.".creer", $L_creation);
	$TPLN->Loop($L_bloc);
	$L_bloc = "ajouterFichier";
	$TPLN->EraseBloc($L_bloc);
} else {
	/* Creation uniquement du sous repertoire themes/<environnement> */
	$TPLN->EraseBloc($L_bloc);
	$L_bloc = "ajouterFichier";
	$TPLN->Parse($L_bloc.".ajouter",$L_ajout);
	$TPLN->Parse($L_bloc.".argid", $argid);
	$L_lien = "";
	if ($L_insubdir) {
		$L_lien .= "&file=" . $file . "/";
	}
	$TPLN->Parse($L_bloc.".lien",$L_lien);
	$TPLN->Parse($L_bloc.".nom",$L_nom);
	$TPLN->Parse($L_bloc.".valid_fichier",$L_valid_prefix.$L_nom);
	$TPLN->Loop($L_bloc);
}


$TPLN->Parse("argid",$argid);
$TPLN->Parse("environnement",$L_environnement['nom']);
$TPLN->Parse("message",$L_message);

$TPLN->IncludeFile("footer",$L_base_env.$session['environnement']."/footer.php");
$TPLN->Write(); 
?> 